#include "../include/file.h"
// 写入到文件中
void F_print(Double_Link_List *list, const char *file_name, const char *mode)
{
    FILE *fp = fopen(file_name, mode);
    if (NULL == fp)
    {
        ERRLOG("文件打开失败");
        return ;
    }
    // 光标移动到开头
    // fseek(fp , 0 , SEEK_SET);

    Double_Node * ptr = list->next;
    // 遍历写入
    for (size_t i = 0; NULL != ptr ; i++)
    {
        fprintf( fp , "%s\t%s\t%d\n" ,ptr->data.name , ptr->data.password , ptr->data.id);
        ptr = ptr->next;
    }
    
    fclose(fp);
}
// 从文件中读取
void F_scanf(Double_Link_List* list , const char * file_name)
{
    // 以只读打开
    FILE*  fp = fopen( file_name , "r");
    if (NULL==fp)
    {
        ERRLOG("文件打开失败!");
        return ;
    }
    // 移动光标到头
    fseek( fp , 0 , SEEK_SET );
    //接收文件行数
    int len = F_linenum(file_name);
    // 移动光标到头
    fseek( fp , 0 , SEEK_SET );
    Log_in_data data;
    Double_Node * ptr = list->next;
    for (size_t i = 0; i < len; i++)
    {
        fscanf( fp , "%s\t%s\t%d\n" , data.name , data.password , &data.id);
        insert_double_node( list , data , i + 1 );
    }
    fclose(fp);
    return ;
}

// 统计文件的行数
int F_linenum(const char *file_name)
{
    // 以只读打开
    FILE *fp = fopen(file_name, "r");
    char ch = '0';       // 接收文件的字符
    int line_num = 0;   //统计行数
    while (EOF != (ch = fgetc(fp)))
    {
        if (ch=='\n')
        {
            line_num++;
        }
        
    }
    return line_num;
}
